package com.gl.glcourses.services.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.flex.remoting.RemotingDestination;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.gl.glcourses.calendar.ICalendarManager;
import com.gl.glcourses.repository.IOficinaRepository;
import com.gl.glcourses.services.IOficinaServices;
import com.gl.glcourses.vos.Calendario;
import com.gl.glcourses.vos.Confirmacion;
import com.gl.glcourses.vos.Oficina;
import com.gl.glcourses.vos.constants.Constants;

@Service
@RemotingDestination(channels = { "my-amf" })
@Transactional
public class OficinaServices implements IOficinaServices {

	@Autowired
	IOficinaRepository repoOficina;
	
	@Autowired
	ICalendarManager calendarManager;
	
	@Transactional
	@Override
	public Confirmacion crearOficina(Oficina oficina)
			throws Exception {
		
		Confirmacion confirmacion = new Confirmacion();
		if(oficina.getNombre().isEmpty() || oficina.getNombre().equals(null)){
			confirmacion.setEstado(Constants.CONFIRMACION_ERROR);
			confirmacion.setErrorString(Constants.OFICINA_ERROR_NOMBRE);
			return confirmacion;
		}

		//si devuelve null es porque el nombre no existe y puede ser creada
		if(repoOficina.findOficina("nombre", oficina.getNombre()) != null){
			confirmacion.setEstado(Constants.CONFIRMACION_ERROR);
			confirmacion.setErrorString(Constants.OFICINA_ERROR_NOMBRE_REPETIDO);
			return confirmacion;
		}

		repoOficina.saveUpdate(oficina);
		confirmacion.setEstado(Constants.CONFIRMACION_OK);

		return confirmacion;
	}

	@Override
	public Oficina buscarOficina(Oficina oficina)
			throws Exception {

		return (Oficina)repoOficina.findById(oficina.getId(), Oficina.class);
	}

	@Override
	public List<Oficina> listarOficinas() 
			throws Exception {

		return repoOficina.getListEntity(Oficina.class);
	}
	
	@Transactional
	@Override
	public void guardarOficinas(List<Oficina> oficinas) 
			throws Exception {

		for (Oficina oficina : oficinas) {
			repoOficina.saveUpdate(oficina);
		}
	}

	@Override
	public  List<Calendario> getUrlOficinas() {
		
		return calendarManager.getUrlOficinas();
	}

}
